El objetivo final de este proyecto es poder estimar el volumen de una botella de coca cola de 355 ml retornable solamente tomando muestras del diámetro de la misma
Antes de empezar a calcular volúmenes de sólidos de revolución es pertinente reflexionar un poco sobre como calculamos el volumen en primer lugar, y que es lo que volumen significa.
El volumen surge antes de todo desarrollo matemático como una magnitud de interés no solo en la física elemental, sino también para casi toda actividad humana. En todo momento interactuamos con objetos en nuestro espacio, que tienen volumen, tienen un contorno y un interior que no puede ser ocupado por ninguna otra cosa. El interés en la formulación de métodos para calcular esta magnitud es de evidente importancia para ramas como la ingeniería, la física, la Arquitectura o incluso la logística. No obstante en la antigüedad este desarrollo siempre se vería opacado por el desarrollo de la matemática de la geometría bidimensional y el cálculo de Áreas por parte de los griegos, que para sorpresa de nadie se trata del volumen (medida) en un espacio de una dimensión menor.
Una excepción más que destacable de esta tendencia y fascinación griega por las figuras planas es Arquímedes. Que se destacó por sus descubrimientos de las relaciones entre volúmenes de diferentes cuerpos, como mejor ejemplo el descubrimiento de que el volumen de la esfera es
Otro importante avance en la caracterización rigurosa de la noción de volumen fue dada por Buenaventura Cavalieri, que bajo su principio estableció que
No obstante las matemáticas no acatarían la noción de volumen hasta la formulación de la teoría de la medida. Esta teoría generaliza la noción de volumen para espacios y conjuntos en dimensiones superiores. La naturaleza de esta teoría es más del interés del análisis y la topología que de la de la geometría, no obstante resulta útil para la comprensión de nuestro cometido, pues enlaza de manera general la noción de integral con la de volumen o medida.
"La noción de medida es una generalización de las ideas de longitud, área o volumen. Como veremos, toda medida lleva además aparejada una correspondiente noción de Integral."
- José C. Sabina de Lis
Para entender como es que se calcula el volumen de cuerpos tridimensionales con herramientas de cálculo de una variable es importante también entender la aparente paradoja de la situación. Queremos calcular el volumen de un cuerpo de 3 dimensiones midiendo una superficie de dos dimensiones.
Este paso consiste en obtener la materia prima con la que estaremos trabajando, a partir los resultados siguientes del proyecto se derivan de estos datos.
Estos datos toman la forma de dos sucesiones
Apartir de aqui a los puntos
Se desean obtener los nodos a partir de una botella de coca cola retornable de 355 ml

La idea es sencilla, por la forma en la que se calcula el volumen del sólido de revolución con el método de discos necesitamos que nuestro integrando sea una función que nos devuelva el radio de la botella a lo largo de longitud de la botella.
Entonces con ayuda de un bernier y una cinta métrica medimos el diámetro de la botella a lo largo de 24 nodos equidistantes por 1 cm, y a través de la relación del radio de la circunferencia con su diámetro se obtuvo cada punto
Se obtuvieron los siguientes datos.
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| yᵢ | 1.4 | 1.3 | 1.25 | 1.35 | 1.45 | 1.65 | 1.95 | 2.35 | 2.55 | 2.75 | 2.89 | 3.0 | 3.05 | 3.1 | 3.13 | 3.05 | 2.9 | 2.8 | 2.7 | 2.6 | 2.55 | 2.7 | 3.05 | 3.15 | 2.85 |
| xᵢ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24.5 |
Graficando se confirma efectivamente asemejan la silueta de la botella partida a la mitad.

El siguiente paso es poder encontrar una curva que se asemeje a la de la botella. Debido a que se cuenta con una cantidad relativamente generosa de nodos, el primer método que intentamos es el de interpolación.
Si en lugar de contar con un número finito de nodos tuviéramos la curva exacta de la silueta de la coca-cola podría parecer que todo sería más sencillo, integraríamos dicha función y listo no es así? En realidad no es tan sencillo, si tuviéramos la función exacta de la silueta de la botella lo más probable es de que su expresión sería absurdamente complicada o de lleno no podría ser escrita como una composición de funciones básicas como son las funciones polinómicas, radicales, racionales o las trascendentales, es decir estaríamos ante una función no elemental.
No obstante eso no es limitante para encontrar una función sencilla que nos sea útil y que se parezca mucho
sea
Una consecuencia directa de este teorema es la de que nos podemos acercar a cualquier función continua en un intervalo cerrado de forma arbitraria. Gracias a este teorema sabemos que sin importar que tan pronunciada o complicada pueda ser la curva de una función continua, podemos aproximarnos a dicha función cuanto queramos con un polinomio. Esto es porque los polinomios son densos en el espacio
Interpolar quiere decir que para nuestros nodos
Los dos métodos más sencillos de entender para construir un polinomio son los polinomios de Lagrange o plantear una matriz de Vandermonde
Estos dos procedimientos son equivalentes, y de forma simbólica producen el mismo resultado. Un polinomio
Esto es una consecuencia del siguiente teorema
dada la sucesion de nodos
si
de donde se tiene la matriz característica
y el vector de resultados
entonces de nuestro sistema de ecuaciones inicial tenemos
En orden para que el postulado del teorema se cumpla se necesita que el sistema tenga una única solución, es decir
Supongamos que
Sea
donde
Para demostrar que los vectores
se desea entonces demostrar que
supongamos que
entonces
Igualando las sumas de los componentes se obtiene un polinomio
Por el Teorema fundamental del álgebra un polinomio de grado
tiene a lo sumo raíces.
En el mejor de los casos
es una contradicción con el teorema fundamental del álgebra y Con esto queda demostrado que
Y que toda la columna
se define
un polinomio de grado
además
Definiendo
para encontrar el polinomio de Lagrange dada por la sucesión de nodos, podemos utilizar el siguiente código
import scipy as sc
poly = sc.interpolate.lagrange(x_i,y_i)
que nos regresa una instancia de la clase polynomial que es nuestra función.Graficando el polinomio se tiene el siguiente ajuste.

El ajuste en general no es bueno, y partir de ciertos nodos el polinomio parece que ya no interpola los nodos correspondientes. La hipótesis es que coeficientes del polinomio no pueden ser obtenidos correctamente por el procedimiento previo debido a las limitaciones que tienen las computadoras con las operaciones de punto flotante. Lo que provoca que el polinomio devuelto por la función sea diferente al verdadero polinomio de Lagrange.
Otra razón por la cual podríamos estar ocurriendo esto es por la elección de nodos y el número de nodos. Al tener 25 nodos de interpolación el polinomio resultante es de grado 25, lo que causa que pueda crecer o decrecer muy rápido en intervalos pequeños. En cuanto la elección de nodos si los nodos son equidistantes el efecto runge sé magnífica.
El efecto runge es un fenómeno común cuando se hace aproximación por polinomios y nuestro polinomio tiene un grado elevado. Lo que resulta en oscilaciones en los extremos del intervalo de interpolación.
Existen varias alternativas para poder obtener un mejor ajuste, el primero sería utilizar una cantidad menor de nodos. El segundo es que en lugar de tomar las muestras equidistantes, tomar más muestras en los bordes del intervalo, esto ayuda a minimizar las oscilaciones. Un criterio Formal para la elección de estos puntos es usar los nodos de chebyshev, que son las raíces de los polinomios de chebyshev de primera especie. De forma más especifica para la eleccion de los nodos
Los polinomios de chebyshev de primera especie se definen de la siguiente manera:
Que con ayuda de identidades trigonométricas pueden ser definidos de manera recursiva.
y dado que
Nota:
es una función que está definida solamente en y su imagen es es decir que está restringida. No obstante, cuando se expande a en su forma polinómica, esta restricción desaparece. son funciones con distintas con dominio e imagen diferentes con la peculiaridad de que mapean a los mismos valores en
Nuestro siguiente intento fue obtener nuestro polinomio a través del método de mínimos cuadrados. Este procedimiento es fundamentalmente diferente en cuestión de cuáles y como son los elementos e hiperparámetros con el que el investigador puede experimentar y que evidentemente producen resultados fundamentalmente distintos al de los polinomios de Lagrange.
En el ajuste de polinomios por mínimos cuadrados se escoge primero el grado del polinomio que queremos que aproxime los nodos. Si elegimos un polinomio de grado
La

La figura anterior ejemplifica el espacio y sus elementos tienen diferentes errores respecto a los nodos
Se denomina Error cuadrado y es una funcion dependiente de

los minimos locales de una funcion de varias variables
Es decir que el
Regresando a la función
Se tiene que cumplir que
buscamos encontrar la derivada repecto a las variables de las que depende
los corchetes
al igual que en el caso anterior cuando
alch esta parte esta confusa
-
Dando valores a
El demostrar que el determinante de esta matriz es 0 es a su vez demostrar que existe un unico punto critico
Y una vez obtenido dicho punto
para encontrar el polinomio de Lagrange dada por la sucesión de nodos, podemos utilizar el siguiente código
from numpy.polynomial.polynomial import Polynomial
poly_ols = Polynomial.fit(x_sample,y_sample,deg=26)
poly_ols.convert().coef[::-1]
que nos devuelve una clase polinomio que contiene los coeficientes de nuestro interes.
Grafcando el polinomio se obtuvo

un ajuste mucho mas adecuado
Comparando los residuales se obtuvo una diferencia abrumadora en el error.

Se sospecha que esta diferencia en el error es causada por el limite de la representacion de los decimales que tienen las computadoras. Esto debido a que teoricamente el polinomio de Lagrange deberia de tener error 0 al pasar por cada uno de los puntos. No obstante seguiria siendo un polinomio altamente inestable por ser de un grado elevado.
Por otro lado con minimos cuadrados nosotros somos capaces de elegir el grado del polinomio y poder llegar asi a curvas mucho mas estables y suaves que nos generan sobre todo un mejor resultado.
Una vez obtenido la funcion que modela la silueta de la botella toca calcular el volumen atraves de los metodos de integracion discutidos previamente
Los polinomios tienen la virtud de ser bastante sencillos de integrar de forma simbolica. Ese no sera el procedimiento que usaremos nosotros.
Para entender de forma intuitiva la construccion de este metodo es pertinente revisitar la construccion informal de las sumas de Riemman.
donde
Geometricamente lo que esto quiere decir es que la serie de las areas de los rectangulos de ancho
Evidentemente trabajando con computadoras no podemos realizar un calculo o tarea un numero infinito de veces pero podemos hacerla un numero de veces suficientes para que la aproximacion sea satisfactoria. Pero tambien buscamos que el trabajo computacional invertido sea invertido de manera eficiente. Esto lo logramos realizando optimizaciones para minimizar el error en las sumas finitas. como por ejemplo cambiando los rctangulos por trapecios
entonces si deseamos aproximar de una mejor manera el area bajo la curva de
El area del trapecio se obtiene de la siguiente manera
de donde
para aproximar el volumen del solido de revolucion se tiene que aproximar
Donde
El volumen total del solido de revolucion es finalmente
Nota: se uso dentro de la formula del trapecio
en lugar de porque la serie esta definida en principio hasta . Esto se escribio asi de forma que reflejara la forma exacta en la que el codigo fue implementado
use std::f64::consts::PI;
// Polinomio aproximador
fn p(x: f64) -> f64 {
4.852272763781776e-11_f64 * x.powi(9)
- 2.1769207076913663e-08_f64 * x.powi(8)
+ 1.76279592469982e-06_f64 * x.powi(7)
- 6.344035947156883e-05_f64 * x.powi(6)
+ 0.0012285008019216523_f64 * x.powi(5)
- 0.013329090419386656_f64 * x.powi(4)
+ 0.074970254828055_f64 * x.powi(3)
- 0.15346857576947837_f64 * x.powi(2)
+ 0.026690674027164477_f64 * x
+ 1.3909550029629412_f64
+ - 0.4 // Ajuste por el grosor aproximado de la botella
}
fn area_trapecio(x1: f64, x2: f64, dx: f64, f: impl Fn(f64) -> f64) -> f64 {
dx * (f(x1) + f(x2)) / 2.
}
fn main() {
// Constantes
let a = 0.0;
let b = 24.5;
let n = 10000;
let dx = (b - a) / n as f64;
// Integración
let volumen = (0..n)
.map(|i| a + i as f64 * dx)
.map(|xi| area_trapecio(xi, xi + dx, dx,|x| p(x).powi(2)))
.sum::<f64>() * PI;
println!("El volumen del solido de revolucion es aproximadamente {}", volumen);
}
La lógica de este programa se implementó en el lenguaje de programación Rust por sus características funcionales que vienen de serie. La programacion funcional es un paradigma de programacion donde se evita el uso de ciclos for y la modificacion del estado interno de un programa.
Este estilo de programacion nos permite mapear colecciones a colecciones sin necesidad de recorrer cada lista. Lo que da lugar a soluciones que pueden parecer un poco confusas en primer lugar, pero que en realidad son mas elegantes y sencillas.
lo que hace la linea despues de //Integracion es en esencia los siguientes mapeos
En primera instancia el volumen aproximado no fue bueno. Alrededor de 511 ml. Se presume que el grosor de la botella es de alrededor de 4 mm por lo que basto con integrar
